/**
 * Generali Solutions d'assurances - Tous droits réservés &copy; 2007 - 2010
 */
package fr.generali.accueilclient.lien.services.impl;

import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Service;

import fr.generali.accueilclient.client.om.IContact;
import fr.generali.accueilclient.commun.exception.AccueilClientBusinessException;
import fr.generali.accueilclient.commun.exception.AccueilClientModificationContactException;
import fr.generali.accueilclient.commun.exception.AccueilClientTechnicalException;
import fr.generali.accueilclient.lien.services.ILienService;
import fr.generali.refservcommuns.rce.desactivation.desactivationservice.Desactivation;
import fr.generali.refservcommuns.rce.desactivation.services.IDesactivationWebService;
import fr.generali.refservcommuns.rce.gestionrelation.gestionrelationservice.GestionRelation;
import fr.generali.refservcommuns.rce.gestionrelation.services.IGestionRelationWebService;
import fr.generali.refservcommuns.rce.gestionrelation.services.TechnicalFault;
import fr.generali.refservcommuns.rce.gestionrelation.services.WsRceBusinessException;

/**
 * Implémentation de {@link ILientService}
 * 
 * @author selrhazala
 */
@Service
public class LienService implements ILienService {

    /**
     * LOGGER
     */
    private static final Logger LOGGER = LoggerFactory.getLogger(LienService.class);

    /**
     * Service de gestion des relations
     */
    @Autowired
    @Qualifier("P17")
    private IGestionRelationWebService p17;

    /**
     * Service de désactivation contact et rib
     */
    @Autowired
    @Qualifier("P18")
    private IDesactivationWebService p18;

    /**
     * Assembler en entrée de P17
     */
    @Autowired
    @Qualifier("contactToGestionRelationConverter")
    private Converter<IContact, GestionRelation> contactToGestionRelationConverter;

    /**
     * Assembler en entrée de P18
     */
    @Autowired
    @Qualifier("contactToDesactivationContactConverter")
    private Converter<IContact, Desactivation> contactToDesactivationContactConverter;

    /**
     * @param contact le contact
     * @throws AccueilClientBusinessException exception fonctionnelle
     */
    public void gererRelation(IContact contact) throws AccueilClientBusinessException {
        try {
            p17.gestionRelation(contactToGestionRelationConverter.convert(contact));
        } catch (TechnicalFault e) {
            throw new AccueilClientTechnicalException(e.getMessage(), StringUtils.EMPTY, e);
        } catch (WsRceBusinessException e) {
            throw new AccueilClientTechnicalException(e.getMessage(), StringUtils.EMPTY, e);
        }
    }

    /**
     * @param contact le contact
     * @throws AccueilClientBusinessException exception fonctionnelle
     */
    public void desactiverLien(IContact contact) throws AccueilClientBusinessException {
        try {
            p18.desactivation(contactToDesactivationContactConverter.convert(contact));
        } catch (fr.generali.refservcommuns.rce.desactivation.services.TechnicalFault e) {
            LOGGER.error(e.getMessage());
            throw new AccueilClientTechnicalException(e.getMessage(), StringUtils.EMPTY, e);
        } catch (fr.generali.refservcommuns.rce.desactivation.services.WsRceBusinessException e) {
            LOGGER.error(e.getMessage());
            throw new AccueilClientModificationContactException(e.getMessage(), StringUtils.EMPTY, e);
        }
    }

}
